package 力扣.二分.三步切分法;

public class 寻找旋转排序数组中的最小值153 {
    public static void main(String[] args) {
        int []nums={3,4,5,1,2};
        int []nums2={3,4,5,6,7,0,1,2};
        int []nums3={1,2,3,4};
        int []nums5={2,1};
        int []nums4={1,2,0};
        int []nums6={1,};
        System.out.println(findMin(nums3));
    }
    public static int findMin(int[] nums) {
        if (nums == null || nums.length == 0){
            return -1;
        }
        int N = nums.length;
        int l = 0 , r = N - 1;//这里需要使用r,所以区间为[0,r]
        while (l < r){//l < r保证了数组中至少还有两个元素，若只有一个元素，直接就是结果了
            int m = l + ((r - l) >> 1);
            if (nums[m] > nums[r]){//说明在左边线段
                l = m + 1;
            }else {//说明在右边线段（这里才是产生最小值的地方）
                r = m;
            }
        }
        return nums[l];
    }





    public int findMin2(int[] nums) {
        if (nums == null|| nums.length == 0){
            return 0;
        }
        int l = 0,r = nums.length - 1;
        while (l < r){
            int m = l + ((r - l) >> 1);
            if (nums[m] > nums[r]){//说明在左线段,这里肯定没有最小值
                l = m + 1;
            }else {
                r = m;
            }
        }
        return nums[l];
    }

}
